package com.dkm.orproject.dkmoa.service.serviceimpl;

import com.dkm.orproject.dkmoa.dao.OaDepartmentMapper;
import com.dkm.orproject.dkmoa.domain.OaDepartment;
import com.dkm.orproject.dkmoa.domain.vo.OaDepartmentVo;
import com.dkm.orproject.dkmoa.service.OaDepartmentService;
import com.dkm.orproject.utils.utils.Tools;
import com.github.pagehelper.PageHelper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.Date;
import java.util.List;

/**
 *  @ClassName : OaDepartmentSeviceImpl  //类名
 *  @Description : service  //描述
 *  @Author : 石智诚  //作者
 *  @Date: 2020-08-05 11:25  //时间
 */
@Service
@Transactional(rollbackFor = Exception.class)
public class OaDepartmentSeviceImpl implements OaDepartmentService {
    @Resource
    OaDepartmentMapper mapper;

    /**
     * 部门的物理删除
     * @param pkDepartmentId 部门Id
     * @return 删除的行数
     */
    @Override
    public int delete(Long pkDepartmentId) {
        return mapper.deleteByPrimaryKey(pkDepartmentId);
    }

    /**
     * 查询所有有效的部门(为下拉框)
     * @return 部门的集合
     */
    @Override
    public List<OaDepartment> findByAll() {
        return mapper.findByAll();
    }

    /**
     * 增加部门
     * @param record 部门信息
     * @return 增加的行数
     */
    @Override
    public int insert(OaDepartment record) {
        record.setDepartmentCode(Tools.clientIdentity(String.valueOf(mapper.count()),"DE",4));
        return mapper.insertSelective(record);
    }


    /**
     * 根据id查询部门
     * @param pkDepartmentId
     * @return 部门的信息
     */
    @Override
    public OaDepartment selectByDepartmentId(Long pkDepartmentId) {
        return mapper.selectByPrimaryKey(pkDepartmentId);
    }



    /**
     * 更新部门信息
     * @param record 部门的信息
     * @return 更新的行数
     */
    @Override
    public int update(OaDepartment record) {
        record.setUpdatedTime(new Date());
        return mapper.updateByPrimaryKeySelective(record);
    }

    /**
     * 单个逻辑删除
     * @param pkDepartmentId 部门id
     * @param personnelName 操作人的名字
     * @return 更新的行数
     */
    @Override
    public int updateById(Long pkDepartmentId, String personnelName) {
        return mapper.updateById(pkDepartmentId,personnelName,new Date());
    }

    /**
     * 多行删除
     * @param list 部门的集合
     * @return 删除的行数
     */
    @Override
    public int deleteAll(List<Long> list) {
        return mapper.deleteAll(list);
    }

    /**
     * 多个逻辑删除
     * @param list 部门的集合
     * @param personnelName 操作人的姓名
     * @return 更新的行数
     */
    @Override
    public int updateAll(List<Long> list,String personnelName) {
        return mapper.updateAll(list,personnelName,new Date());
    }

    /**
     * 查询部门并进行分页
     * @param department 部门 用于条件查询
     * @param page 页数
     * @param limit 显示的数量
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 部门的集合
     */
    @Override
    public List<OaDepartment> findAll(OaDepartment department, Integer page, Integer limit, String startTime, String endTime) {
        //设置分页数据
        PageHelper.startPage(page,limit);
        return mapper.findAll(department,startTime,endTime);
    }


    /**
     * 查询总数
     * @param department 部门模型 用于条件查询
     * @param startTime 开始时间
     * @param endTime 结束
     * @return 数量
     */
    @Override
    public Long rowCount(OaDepartment department, String startTime, String endTime) {
        return mapper.rowCount(department,startTime,endTime);
    }

    /**
     * 查询关键字
     * @param keyword 关键字
     * @return 回调函数
     */
    @Override
    public int findByKeyWord(String keyword) {
        return mapper.findByKeyword(keyword);
    }

    /**
     * 查看页面
     * @param pkDepartmentId 部门id
     * @return 部门实体类
     */
    @Override
    public OaDepartmentVo selectById(Long pkDepartmentId) {
        return mapper.selectById(pkDepartmentId);
    }
}
